
//      包装类：
//      Object 引用可以指向任意类型的对象，但有例外出现了，8 种基本数据类型不是对象
//      好处：可以使简单的数据也能面向对象

//       包装类的使用   装箱(boxing)和拆箱(unboxing)
//          装箱、装包：把简单类型-》包装类类型
//          拆箱、拆包：把包装类类型-》简单数据类型的数据
public class TestDemo {

//    这里是泛型
    public static void main1(String[] args) {
        String[] strings = new String[10];
//        String[] strings1 = new Object[10];error
        Object[] objects = new String[10];
//        String[]  和  Object[]  平级都是数组
        Object o = new String[10];//Object 属于单独的数据类型  Object向下转换
    }

    public static void main2(String[] args) {
        String str = "123";
        int ret = Integer.valueOf(str);
        System.out.println(ret);//123
    }

    public static void main3(String[] args) {
        Integer a = 123;//装箱、装包(隐式的)
        int b = a;//拆箱、拆包(隐式的)
        System.out.println(a+" "+b);//123 123
        System.out.println("==================");

        int i = 10;//显示的初始化

        Integer a2 = Integer.valueOf(123);//装箱、装包(显式的)
        Integer a3 = new Integer(123);//装箱、装包(显式的)

        int b2 = a2.intValue();//拆箱、拆包(显式的)
        double b3 = a2.doubleValue();//拆箱、拆包(显式的)
    }

    public static void main(String[] args) {
        Integer a = 123;
        Integer b = 123;
        System.out.println(a == b);//true

        Integer a2 = 129;
        Integer b2 = 129;
        System.out.println(a2 == b2);//false

//        为什么呢？
//        看看Integer里面valueOf源码
//    public static Integer valueOf(int i) {
//        if (i >= IntegerCache.low && i <= IntegerCache.high)
//            return IntegerCache.cache[i + (-IntegerCache.low)];范围是[-128,127] 存在cache数组[0,255]
//        return new Integer(i);//因为129超出范围  使用new了新对象
//    }
    }








}
